#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    statusLabel = new QLabel;
    statusLabel->setText(tr("当前位置："));
    statusLabel->setFixedWidth(100);

    mousePosLabel = new QLabel;
    mousePosLabel->setText(tr(""));
    mousePosLabel->setFixedWidth(100);

    QLabel *xx = new QLabel;
    xx->setText(tr("xxxx"));;

    ui->statusBar->addWidget(xx); //位于最左端，当调用showMessage函数时，消息文字将与此函数添加的部件上文字重合

    ui->statusBar->addPermanentWidget(statusLabel); //添加永久性部件，永久意味着它不能被临时消息（showMessage函数）掩盖，位于最右端，stretch伸缩性为0
    ui->statusBar->addPermanentWidget(mousePosLabel);

//    QWidget中使用是没有问题的，但是，对于QMainWindow即使使用了setMouseTracking(true)依然无法捕捉到鼠标没有按下的移动，
//    只有在鼠标按下是才能捕捉。
//    解决办法：要先把QMainWindow的CentralWidget使用setMouseTracking(true)开启移动监视。
//    然后再把QMainWindow的setMouseTracking(true)开启监视。之后就一切正常了。
//    原因：如果你想响应鼠标事件的控件被某个父控件包含，则该控件及其父控件或容器都需要setMouseTracking(true);
    ui->centralWidget->setMouseTracking(true); // 跟踪鼠标移动。对QMainwindow无效，对QWidget有效
    setMouseTracking(true);

    resize(400, 200);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::mousePressEvent(QMouseEvent *event)
{
    QString str = "(" + QString::number(event->x()) + "," + QString::number(event->y()) + ")";

    if (event->button() == Qt::LeftButton)
    {
        ui->statusBar->showMessage(tr("左键：") + str);
    }
    else if (event->button() == Qt::RightButton)
    {
        ui->statusBar->showMessage(tr("右键：") + str);
    }
    else if (event->button() == Qt::MiddleButton)
    {
        ui->statusBar->showMessage(tr("中键：") + str);
    }
}

void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
    mousePosLabel->setText("(" + QString::number(event->x()) + "," + QString::number(event->y()) + ")");
}

void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
    QString str = "(" + QString::number(event->x()) + "," + QString::number(event->y()) + ")";
    ui->statusBar->showMessage(tr("释放在：") + str, 3000);
}

void MainWindow::mouseDoubleClickEvent(QMouseEvent *event)
{

}
